#ifndef ENTITYFACTORY_H
#define ENTITYFACTORY_H

#include "Entity.h"

class AttackWallMediator;
class TargetMediator;
class CollisionManager;
class RenderSystem;
class ResourceManager;
class SceneManager;
class EntityManager;
class EntityFactory
{
public:
	EntityFactory(RenderSystem* render_system, ResourceManager* resource_manager, SceneManager* scene_manager);
	virtual ~EntityFactory(void);

	Entity* Create(EEntityType entity_type, Grid* grid);
	void SetCollisionManager(CollisionManager* collision_manager) { m_collision_manager = collision_manager; }
	void SetEntityManager(EntityManager* entity_manager) { m_entity_manager = entity_manager; }
	void CreateMediators();
	void RemoveMediators();

	ResourceManager* GetResouceManager() { return m_resource_manager; };
private:
	RenderSystem* m_render_system;
	ResourceManager* m_resource_manager;
	SceneManager* m_scene_manager;
	CollisionManager* m_collision_manager;
	EntityManager* m_entity_manager;
	TargetMediator* m_target_mediator;
	AttackWallMediator* m_attack_wall_mediator;
	Shader* m_shader;
};

#endif //ENTITYFACTORY_H